package com.arithmetic;

/**
 * 二分查找唯一错误的版本
 * @author 10259
 */
public class BinarySearchVersionTest {
    public static void main(String[] args) {

        int i = firstBadVersion(3);
        System.out.println(i);

    }
    /**
     * 假设我有N个版本,其中有某个版本往后的版本代码都出现了问题
     * 我想找到最初始出现问题版本的代码
     * 目前提供了某个方法能判断你这个版本是否有问题
     * 提供了版本总长度
     */
    public static int firstBadVersion(int n) {
        //版本必须大于1
        if (n < 1) {
            return -1;
        }
        //设置数组的左侧长度
        int left = 1;
        //设置数组的总长度
        int right = n;
        //设置返回值
        int result = -1;
        //循环条件为：当左长度小于右长度的时候
        while (left <= right) {
            //初始化折半后的值
            int mid = left + ((right - left) >> 1);
            //判断左侧的某个版本是否符合规范
            if (isBadVersion(mid)) {
                right = mid - 1;
                result = mid;
            //如果不符合，则向左侧加一继续执行
            } else {
                left = mid + 1;
            }
        }
        return result;
    }

    /**
     * 判断该版本是否存在问题
     * @param mid
     * @return
     */
    private static boolean isBadVersion(int mid) {
        if(mid > 2){
            return true;
        }
        return false;
    }
}
